package com.qidianit.task.service.impl;

import com.qidianit.task.mapper.TaskMapper;
import com.qidianit.task.pojo.Task;
import com.qidianit.task.service.TaskService;
import com.qidianit.task.util.pojo.QdResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @Author 钟思念
 * @Company
 * @Description
 * @Time 2024/9/10 14:38
 */
@Service
public class TaskServiceImpl implements TaskService {
    //查看任务列表清单
    @Autowired
    private TaskMapper taskMapper;
    @Override
    public QdResult list(String projectId, Long parentId) {
        return QdResult.success(taskMapper.selectList(projectId,parentId));
    }
    //先判断数据再保存新增的数据
    @Override
    public QdResult save(Task task) {
        task.setTaskStatus(1);
        task.setTaskParent(2);
        task.setCreateTime(new Date());
        int i = taskMapper.insertTask(task);
        // 判断当前任务是否有父级任务
        if(i == 1 && !task.getTaskParentId().equals(new Long(0))){
            // 查询父级任务
            Task parentTask = taskMapper.selectById(task.getTaskParentId());
            // 判断父级任务的parent是否是1
            if(parentTask.getTaskParent().equals(new Integer(2))){
                parentTask.setTaskParent(1);
                taskMapper.updateById(parentTask);
            }
        }
        return i == 1?QdResult.success(task):QdResult.error();
    }
    //通过id查询项目详情
    @Override
    public QdResult queryById(Long taskId) {
        return QdResult.success(taskMapper.selectById(taskId));
    }

    //先判断数据再去做删除操作
    @Override
    public QdResult deleteTask(Task task) {
        // 打印 taskParent 信息
        System.out.println("Task Parent: " + task.getTaskParent());
        // 首先检查 taskParent 是否为空
        if (task.getTaskParent() == null) {
            return QdResult.error();
        }
        // 首先判断任务是否为子任务（taskParent == 2 表示是子任务）
        if (task.getTaskParent() == 2) {
            Long taskParentId = task.getTaskParentId();
            // 确保 taskParentId 不为 0，表示有父任务
            if (taskParentId != 0) {
                // 查询父任务下的子任务数量
                int count = taskMapper.selectCount(taskParentId);
                System.out.println("taskParentId"+taskParentId);
                System.out.println("count"+count);
                // 标志位判断是否需要修改父任务的状态
                boolean editFather = true;
                // 如果子任务数量大于1，不修改父任务状态
                if (count > 1) {
                    editFather = false;
                }
                // 如果需要修改父任务（即父任务没有其他子任务），将父任务的 taskParent 置为 0
                if (editFather) {
                    taskMapper.changeTaskParent(taskParentId);
                }
                // 删除子任务并返回成功结果
                return QdResult.success(taskMapper.deleteByTask(task));
            } else {
                // taskParentId 为 0 能删除
                return QdResult.success(taskMapper.deleteByTask(task));
            }
        } else {
            // 任务不是子任务，不能删除
            return QdResult.error();
        }
    }


    //保存编辑的数据
    @Override
    public QdResult updateByEdit(Task task) {
        return QdResult.success(taskMapper.updateById(task));
    }
    //我待办的任务
    @Override
    public QdResult myContinueTask(Long userId) {
        return QdResult.success(taskMapper.selectContinueTask(userId));
    }
    //我完成的任务
    @Override
    public QdResult myOverTask(Long userId) {
        return QdResult.success(taskMapper.selectOverTask(userId));
    }
    //通过taskId逻辑删除task
    @Override
    public QdResult deleteTaskByTaskId(Long taskId) {
        return QdResult.success(taskMapper.updateByTaskId(taskId));
    }
    //通过projectId查询项目中task的数量
    @Override
    public QdResult queryTaskByProjectId(String projectId) {
        return QdResult.success(taskMapper.selectTaskByProjectId(projectId));
    }


}
